package com.ecoolex.discount.sales.entity;

import com.ecoolex.framework.common.annotation.Description;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import org.springframework.lang.NonNull;

/**
 *
 *   由我礼品卡<br>
 *<br>
 * 数据表： you_world_gift_card
 *
 */
@Description({"由我礼品卡"})
public class YouWorldGiftCard implements Serializable {
    /**
     *
     *   礼品卡Id    <br>
     *<br>
     * 字段名： you_world_gift_card.CardId
     */
    @Description({"礼品卡Id", "不能为空", "数据长度: 10"})
    @NonNull
    private Integer cardId;

    /**
     *
     *   该值域为'active'若礼品卡可购买。该值域为'closed'若礼品卡没有库存。    <br>
     *<br>
     * 字段名： you_world_gift_card.StorefrontStatus
     */
    @Description({"该值域为'active'若礼品卡可购买。该值域为'closed'若礼品卡没有库存。", "不能为空", "数据长度: 50"})
    @NonNull
    private String storefrontStatus;

    /**
     *
     *   显示补充库存的时间。若'storefront_status' 为 'active'，该值域为空。    <br>
     *<br>
     * 字段名： you_world_gift_card.OutOfStockEndTime
     */
    @Description({"显示补充库存的时间。若'storefront_status' 为 'active'，该值域为空。", "数据长度: 26"})
    private Date outOfStockEndTime;

    /**
     *
     *   礼品卡的名字。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardName
     */
    @Description({"礼品卡的名字。", "不能为空", "数据长度: 200"})
    @NonNull
    private String cardName;

    /**
     *
     *   礼品卡的折扣百分比。若用$94买了$100的礼品卡，则该值域为6%。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardDiscountPercent
     */
    @Description({"礼品卡的折扣百分比。若用$94买了$100的礼品卡，则该值域为6%。", "不能为空", "数据长度: 18"})
    @NonNull
    private BigDecimal cardDiscountPercent;

    /**
     *
     *   礼品卡商家品牌的logo的url。    <br>
     *<br>
     * 字段名： you_world_gift_card.BrandLogo
     */
    @Description({"礼品卡商家品牌的logo的url。", "不能为空", "数据长度: 1024"})
    @NonNull
    private String brandLogo;

    /**
     *
     *   礼品卡图片的url。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardImage
     */
    @Description({"礼品卡图片的url。", "不能为空", "数据长度: 1024"})
    @NonNull
    private String cardImage;

    /**
     *
     *   该值域只可能为'variable'或'fixed'。若为'variable'，则返还的数据中会有'card_min_value'值域和'card_max_value'值域，且用户只能购买在这两个值域之内的礼品卡面值。若该值域为'fixed'，则用户只能买固定的礼品卡数额，且返回数据不会有'card_min_value'和'card_max_value'值域。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardValueType
     */
    @Description({"该值域只可能为'variable'或'fixed'。若为'variable'，则返还的数据中会有'card_min_value'值域和'card_max_value'值域，且用户只能购买在这两个值域之内的礼品卡面值。若该值域为'fixed'，则用户只能买固定的礼品卡数额，且返回数据不会有'card_min_value'和'card_max_value'值域。", "不能为空", "数据长度: 255"})
    @NonNull
    private String cardValueType;

    /**
     *
     *   该值域存在若'card_value_type'值域为'variable'。若存在，则礼品卡面值必须大于等于这个值。货币单位为美分。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardMinValue
     */
    @Description({"该值域存在若'card_value_type'值域为'variable'。若存在，则礼品卡面值必须大于等于这个值。货币单位为美分。", "数据长度: 10"})
    private Integer cardMinValue;

    /**
     *
     *   该值域存在若'card_value_type'值域为'variable'。若存在，则礼品卡面值必须小于等于这个值。货币单位为美分。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardMaxValue
     */
    @Description({"该值域存在若'card_value_type'值域为'variable'。若存在，则礼品卡面值必须小于等于这个值。货币单位为美分。", "数据长度: 10"})
    private Integer cardMaxValue;

    /**
     *
     *   排序字段    <br>
     *<br>
     * 字段名： you_world_gift_card.Ranking
     */
    @Description({"排序字段", "数据长度: 10"})
    private Integer ranking;

    /**
     *
     *   礼品卡的面值。    <br>
     *<br>
     * 字段名： you_world_gift_card.FaceValue
     */
    @Description({"礼品卡的面值。", "数据长度: 10"})
    private Integer faceValue;

    /**
     *
     *   是否添加    <br>
     *<br>
     * 字段名： you_world_gift_card.IsAdded
     */
    @Description({"是否添加", "不能为空", "数据长度: 1"})
    @NonNull
    private Boolean isAdded;

    /**
     *
     *   状态; 正常; 已删除;     <br>
     *<br>
     * 字段名： you_world_gift_card.Status
     */
    @Description({"状态; 正常; 已删除; ", "不能为空", "数据长度: 5"})
    @NonNull
    private Integer status;

    public static final Boolean NOT_DELETED = Deleted.NOT_DELETED.value();

    public static final Boolean IS_DELETED = Deleted.IS_DELETED.value();

    /**
     *
     *   逻辑删除    <br>
     *<br>
     * 字段名： you_world_gift_card.Deleted
     */
    @Description({"逻辑删除", "不能为空", "数据长度: 1"})
    @NonNull
    private Boolean deleted;

    /**
     *
     *   创建用户    <br>
     *<br>
     * 字段名： you_world_gift_card.CreateUser
     */
    @Description({"创建用户", "不能为空", "数据长度: 50"})
    @NonNull
    private String createUser;

    /**
     *
     *   创建时间    <br>
     *<br>
     * 字段名： you_world_gift_card.CreateTime
     */
    @Description({"创建时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date createTime;

    /**
     *
     *   修改用户    <br>
     *<br>
     * 字段名： you_world_gift_card.UpdateUser
     */
    @Description({"修改用户", "不能为空", "数据长度: 50"})
    @NonNull
    private String updateUser;

    /**
     *
     *   修改时间    <br>
     *<br>
     * 字段名： you_world_gift_card.UpdateTime
     */
    @Description({"修改时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date updateTime;

    private static final long serialVersionUID = 1L;

    /**
     * 获取参数<br><br>
     *
     *   礼品卡Id    <br>
     *<br>
     * 字段名： you_world_gift_card.CardId
     */
    public Integer getCardId() {
        return cardId;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡Id<br>
     *<br>
     * 字段名： you_world_gift_card.CardId
     */
    public void setCardId(Integer cardId) {
        this.cardId = cardId;
    }

    /**
     * 获取参数<br><br>
     *
     *   该值域为'active'若礼品卡可购买。该值域为'closed'若礼品卡没有库存。    <br>
     *<br>
     * 字段名： you_world_gift_card.StorefrontStatus
     */
    public String getStorefrontStatus() {
        return storefrontStatus;
    }

    /**
     * 设置参数<br><br>
     *
     *   该值域为'active'若礼品卡可购买。该值域为'closed'若礼品卡没有库存。<br>
     *<br>
     * 字段名： you_world_gift_card.StorefrontStatus
     */
    public void setStorefrontStatus(String storefrontStatus) {
        this.storefrontStatus = storefrontStatus == null ? null : storefrontStatus.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   显示补充库存的时间。若'storefront_status' 为 'active'，该值域为空。    <br>
     *<br>
     * 字段名： you_world_gift_card.OutOfStockEndTime
     */
    public Date getOutOfStockEndTime() {
        return outOfStockEndTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   显示补充库存的时间。若'storefront_status' 为 'active'，该值域为空。<br>
     *<br>
     * 字段名： you_world_gift_card.OutOfStockEndTime
     */
    public void setOutOfStockEndTime(Date outOfStockEndTime) {
        this.outOfStockEndTime = outOfStockEndTime;
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡的名字。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardName
     */
    public String getCardName() {
        return cardName;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡的名字。<br>
     *<br>
     * 字段名： you_world_gift_card.CardName
     */
    public void setCardName(String cardName) {
        this.cardName = cardName == null ? null : cardName.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡的折扣百分比。若用$94买了$100的礼品卡，则该值域为6%。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardDiscountPercent
     */
    public BigDecimal getCardDiscountPercent() {
        return cardDiscountPercent;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡的折扣百分比。若用$94买了$100的礼品卡，则该值域为6%。<br>
     *<br>
     * 字段名： you_world_gift_card.CardDiscountPercent
     */
    public void setCardDiscountPercent(BigDecimal cardDiscountPercent) {
        this.cardDiscountPercent = cardDiscountPercent;
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡商家品牌的logo的url。    <br>
     *<br>
     * 字段名： you_world_gift_card.BrandLogo
     */
    public String getBrandLogo() {
        return brandLogo;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡商家品牌的logo的url。<br>
     *<br>
     * 字段名： you_world_gift_card.BrandLogo
     */
    public void setBrandLogo(String brandLogo) {
        this.brandLogo = brandLogo == null ? null : brandLogo.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡图片的url。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardImage
     */
    public String getCardImage() {
        return cardImage;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡图片的url。<br>
     *<br>
     * 字段名： you_world_gift_card.CardImage
     */
    public void setCardImage(String cardImage) {
        this.cardImage = cardImage == null ? null : cardImage.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   该值域只可能为'variable'或'fixed'。若为'variable'，则返还的数据中会有'card_min_value'值域和'card_max_value'值域，且用户只能购买在这两个值域之内的礼品卡面值。若该值域为'fixed'，则用户只能买固定的礼品卡数额，且返回数据不会有'card_min_value'和'card_max_value'值域。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardValueType
     */
    public String getCardValueType() {
        return cardValueType;
    }

    /**
     * 设置参数<br><br>
     *
     *   该值域只可能为'variable'或'fixed'。若为'variable'，则返还的数据中会有'card_min_value'值域和'card_max_value'值域，且用户只能购买在这两个值域之内的礼品卡面值。若该值域为'fixed'，则用户只能买固定的礼品卡数额，且返回数据不会有'card_min_value'和'card_max_value'值域。<br>
     *<br>
     * 字段名： you_world_gift_card.CardValueType
     */
    public void setCardValueType(String cardValueType) {
        this.cardValueType = cardValueType == null ? null : cardValueType.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   该值域存在若'card_value_type'值域为'variable'。若存在，则礼品卡面值必须大于等于这个值。货币单位为美分。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardMinValue
     */
    public Integer getCardMinValue() {
        return cardMinValue;
    }

    /**
     * 设置参数<br><br>
     *
     *   该值域存在若'card_value_type'值域为'variable'。若存在，则礼品卡面值必须大于等于这个值。货币单位为美分。<br>
     *<br>
     * 字段名： you_world_gift_card.CardMinValue
     */
    public void setCardMinValue(Integer cardMinValue) {
        this.cardMinValue = cardMinValue;
    }

    /**
     * 获取参数<br><br>
     *
     *   该值域存在若'card_value_type'值域为'variable'。若存在，则礼品卡面值必须小于等于这个值。货币单位为美分。    <br>
     *<br>
     * 字段名： you_world_gift_card.CardMaxValue
     */
    public Integer getCardMaxValue() {
        return cardMaxValue;
    }

    /**
     * 设置参数<br><br>
     *
     *   该值域存在若'card_value_type'值域为'variable'。若存在，则礼品卡面值必须小于等于这个值。货币单位为美分。<br>
     *<br>
     * 字段名： you_world_gift_card.CardMaxValue
     */
    public void setCardMaxValue(Integer cardMaxValue) {
        this.cardMaxValue = cardMaxValue;
    }

    /**
     * 获取参数<br><br>
     *
     *   排序字段    <br>
     *<br>
     * 字段名： you_world_gift_card.Ranking
     */
    public Integer getRanking() {
        return ranking;
    }

    /**
     * 设置参数<br><br>
     *
     *   排序字段<br>
     *<br>
     * 字段名： you_world_gift_card.Ranking
     */
    public void setRanking(Integer ranking) {
        this.ranking = ranking;
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡的面值。    <br>
     *<br>
     * 字段名： you_world_gift_card.FaceValue
     */
    public Integer getFaceValue() {
        return faceValue;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡的面值。<br>
     *<br>
     * 字段名： you_world_gift_card.FaceValue
     */
    public void setFaceValue(Integer faceValue) {
        this.faceValue = faceValue;
    }

    /**
     * 获取参数<br><br>
     *
     *   是否添加    <br>
     *<br>
     * 字段名： you_world_gift_card.IsAdded
     */
    public Boolean getIsAdded() {
        return isAdded;
    }

    /**
     * 设置参数<br><br>
     *
     *   是否添加<br>
     *<br>
     * 字段名： you_world_gift_card.IsAdded
     */
    public void setIsAdded(Boolean isAdded) {
        this.isAdded = isAdded;
    }

    /**
     * 获取参数<br><br>
     *
     *   状态; 正常; 已删除;     <br>
     *<br>
     * 字段名： you_world_gift_card.Status
     */
    public Integer getStatus() {
        return status;
    }

    /**
     * 设置参数<br><br>
     *
     *   状态; 正常; 已删除; <br>
     *<br>
     * 字段名： you_world_gift_card.Status
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    public void andLogicalDeleted(boolean deleted) {
        setDeleted(deleted ? Deleted.IS_DELETED.value() : Deleted.NOT_DELETED.value());
    }

    /**
     * 获取参数<br><br>
     *
     *   逻辑删除    <br>
     *<br>
     * 字段名： you_world_gift_card.Deleted
     */
    public Boolean getDeleted() {
        return deleted;
    }

    /**
     * 设置参数<br><br>
     *
     *   逻辑删除<br>
     *<br>
     * 字段名： you_world_gift_card.Deleted
     */
    public void setDeleted(Boolean deleted) {
        this.deleted = deleted;
    }

    /**
     * 获取参数<br><br>
     *
     *   创建用户    <br>
     *<br>
     * 字段名： you_world_gift_card.CreateUser
     */
    public String getCreateUser() {
        return createUser;
    }

    /**
     * 设置参数<br><br>
     *
     *   创建用户<br>
     *<br>
     * 字段名： you_world_gift_card.CreateUser
     */
    public void setCreateUser(String createUser) {
        this.createUser = createUser == null ? null : createUser.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   创建时间    <br>
     *<br>
     * 字段名： you_world_gift_card.CreateTime
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   创建时间<br>
     *<br>
     * 字段名： you_world_gift_card.CreateTime
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取参数<br><br>
     *
     *   修改用户    <br>
     *<br>
     * 字段名： you_world_gift_card.UpdateUser
     */
    public String getUpdateUser() {
        return updateUser;
    }

    /**
     * 设置参数<br><br>
     *
     *   修改用户<br>
     *<br>
     * 字段名： you_world_gift_card.UpdateUser
     */
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser == null ? null : updateUser.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   修改时间    <br>
     *<br>
     * 字段名： you_world_gift_card.UpdateTime
     */
    public Date getUpdateTime() {
        return updateTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   修改时间<br>
     *<br>
     * 字段名： you_world_gift_card.UpdateTime
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public enum Deleted {
        NOT_DELETED(new Boolean("false"), "未删除"),
        IS_DELETED(new Boolean("true"), "已删除");

        private final Boolean value;

        private final String name;

        Deleted(Boolean value, String name) {
            this.value = value;
            this.name = name;
        }

        public Boolean getValue() {
            return this.value;
        }

        public Boolean value() {
            return this.value;
        }

        public String getName() {
            return this.name;
        }
    }

    public enum Column {
        cardId("CardId", "cardId", "INTEGER", false),
        storefrontStatus("StorefrontStatus", "storefrontStatus", "VARCHAR", false),
        outOfStockEndTime("OutOfStockEndTime", "outOfStockEndTime", "TIMESTAMP", false),
        cardName("CardName", "cardName", "VARCHAR", false),
        cardDiscountPercent("CardDiscountPercent", "cardDiscountPercent", "DECIMAL", false),
        brandLogo("BrandLogo", "brandLogo", "VARCHAR", false),
        cardImage("CardImage", "cardImage", "VARCHAR", false),
        cardValueType("CardValueType", "cardValueType", "VARCHAR", false),
        cardMinValue("CardMinValue", "cardMinValue", "INTEGER", false),
        cardMaxValue("CardMaxValue", "cardMaxValue", "INTEGER", false),
        ranking("Ranking", "ranking", "INTEGER", false),
        faceValue("FaceValue", "faceValue", "INTEGER", false),
        isAdded("IsAdded", "isAdded", "BIT", false),
        status("Status", "status", "INTEGER", true),
        deleted("Deleted", "deleted", "BIT", false),
        createUser("CreateUser", "createUser", "VARCHAR", true),
        createTime("CreateTime", "createTime", "TIMESTAMP", false),
        updateUser("UpdateUser", "updateUser", "VARCHAR", false),
        updateTime("UpdateTime", "updateTime", "TIMESTAMP", false);

        private static final String BEGINNING_DELIMITER = "`";

        private static final String ENDING_DELIMITER = "`";

        private final String column;

        private final boolean isColumnNameDelimited;

        private final String javaProperty;

        private final String jdbcType;

        public String value() {
            return this.column;
        }

        public String getValue() {
            return this.column;
        }

        public String getJavaProperty() {
            return this.javaProperty;
        }

        public String getJdbcType() {
            return this.jdbcType;
        }

        Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) {
            this.column = column;
            this.javaProperty = javaProperty;
            this.jdbcType = jdbcType;
            this.isColumnNameDelimited = isColumnNameDelimited;
        }

        public String desc() {
            return this.getEscapedColumnName() + " DESC";
        }

        public String asc() {
            return this.getEscapedColumnName() + " ASC";
        }

        public static Column[] excludes(Column ... excludes) {
            ArrayList<Column> columns = new ArrayList<>(Arrays.asList(Column.values()));
            if (excludes != null && excludes.length > 0) {
                columns.removeAll(new ArrayList<>(Arrays.asList(excludes)));
            }
            return columns.toArray(new Column[]{});
        }

        public String getEscapedColumnName() {
            if (this.isColumnNameDelimited) {
                return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString();
            } else {
                return this.column;
            }
        }
    }
}